package com.dyna.chat.service;

import com.dyna.chat.domain.dto.WSAuthorize;
import com.dyna.chat.domain.resp.ws.WSBaseResp;
import io.netty.channel.Channel;

/**
 * @author zhoucaiwang
 * @date 2024/7/13
 */
public interface WebSocketService {

    /**
     * 处理所有ws连接的事件
     *
     * @param channel websocket连接
     */
    void connect(Channel channel);

    /**
     * 连接认证
     * @param channel 连接
     * @param wsAuthorize 认证信息
     */
    void authorize(Channel channel, WSAuthorize wsAuthorize);

    /**
     * 处理登录请求
     * @param channel 连接
     */
    void handleLoginReq(Channel channel);

    /**
     * 发送到用户
     * @param wsBaseResp 发送的消息体
     * @param userId 用户id
     */
    void sendToUserId(WSBaseResp<?> wsBaseResp, Long userId);

    /**
     * 推动消息给所有在线的人
     *
     * @param wsBaseResp 发送的消息体
     */
    void sendToAllOnline(WSBaseResp<?> wsBaseResp);

    /**
     * 推动消息给所有在线的人
     *
     * @param wsBaseResp 发送的消息体
     * @param skipUserId    需要跳过的人
     */
    void sendToAllOnline(WSBaseResp<?> wsBaseResp, Long skipUserId);

}
